﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Basicas;
using ProjetoJornada_Negocios.Negocio;
using ProjetoJornada_Negocios.Fachada;
using System.Data;
using Basicas.Utils.excecoes;
using System.Threading;
using MySql.Data.MySqlClient;
using Basicas.Utils;

namespace ProjetoJornada.Interno
{
    public partial class Aluno_Cadastro : System.Web.UI.Page
    {

        Fachada fachada = Fachada.Instance;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["Jornada"] == null)
                {
                    Response.Redirect("Jornada_Escolher.aspx?urlReturn=" + HttpContext.Current.Request.Url.AbsolutePath);                
                }
            }

        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            #region "Váriavies"
            string _uf;
            string _cidade;
            string _bairro;
            string _tipo_lagradouro;
            string _logradouro;
            string _resultado;
            #endregion

            //Cria um DataSet  baseado no retorno do XML  
            DataSet ds = new DataSet();
            ds.ReadXml("http://cep.republicavirtual.com.br/web_cep.php?cep=" + CEPTextBox.Text.Replace("-", "").Trim() + "&formato=xml");

            if (ds != null)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    _resultado = ds.Tables[0].Rows[0]["resultado"].ToString();
                    switch (_resultado)
                    {
                        case "1":
                            _uf = ds.Tables[0].Rows[0]["uf"].ToString().Trim();
                            _cidade = ds.Tables[0].Rows[0]["cidade"].ToString().Trim();
                            _bairro = ds.Tables[0].Rows[0]["bairro"].ToString().Trim();
                            _tipo_lagradouro = ds.Tables[0].Rows[0]["tipo_logradouro"].ToString().Trim();
                            _logradouro = ds.Tables[0].Rows[0]["logradouro"].ToString().Trim();
                            break;
                        case "2":
                            _uf = ds.Tables[0].Rows[0]["uf"].ToString().Trim();
                            _cidade = ds.Tables[0].Rows[0]["cidade"].ToString().Trim();
                            _bairro = "";
                            _tipo_lagradouro = "";
                            _logradouro = "";
                            break;
                        default:
                            _uf = "";
                            _cidade = "";
                            _bairro = "";
                            _tipo_lagradouro = "";
                            _logradouro = "";
                            break;
                    }

                    this.UFDropDownList.SelectedValue = _uf;
                    this.CidadeTextBox.Text = _cidade;
                    this.BairroTextBox.Text = _bairro;
                    this.LogradouroTextBox.Text = _tipo_lagradouro + " " + _logradouro;

                }
            }
        }

        private void ListarCursos()
        {
            try
            {
                List<Turma> listaDeTurmas = fachada.ConsultarTodasAsTurmasPorJornada(Convert.ToInt32(Session["Jornada"]));
                Dictionary<int, int> qtdDeAlunos = fachada.GetQuantidadeDeAlunosEmTodasAsTurmas(Convert.ToInt32(Session["Jornada"]));

                int numeroDeTurmas = listaDeTurmas.Count;
                ListItem[] turmas = new ListItem[numeroDeTurmas];
                for (int i = 0; i < numeroDeTurmas; i++)
                {
                    ListItem itemTurma = new ListItem();
                    itemTurma.Text = listaDeTurmas[i].Nome;
                    int idTurma = listaDeTurmas[i].Id;
                    itemTurma.Value = Convert.ToString(idTurma);

                    if (qtdDeAlunos.ContainsKey(idTurma))
                    {
                        if (qtdDeAlunos[idTurma] >= listaDeTurmas[i].QtdeVagas)
                        {
                            itemTurma.Enabled = false;
                            itemTurma.Text = itemTurma.Text + " [VAGAS ESGOTADAS]";
                        }
                    }

                    turmas[i] = itemTurma;
                }
                this.imagemCarregando.Visible = false;
                this.lblCarregando.Visible = false;
                this.cblTurmas.Items.AddRange(turmas);

                Session["ListaDeTurmaDaJornada"] = listaDeTurmas;
            }
            catch (MySqlException ex)
            {
                if (ex.Number == 1042)// Conexao com o banco
                {
                    Response.Redirect("ErroPageConnectionDB.aspx");
                }            
            }
        }

        protected void CadastrarImageButton_Click(object sender, ImageClickEventArgs e)
        {
            CadastrarImageButton.Enabled = false;

            string nome = NomeTextBox.Text;
            string cpf = CPFTextBox.Text;
            cpf = cpf.Replace("-", "");
            cpf = cpf.Replace(".", "");
            string rg = RGTextBox.Text;
            string email = EmailTextBox.Text;
            string telefone = TelefoneTextBox.Text;
            string celular = CelularTextBox.Text;
            string instituicao = InstituicaoEnsTextBox.Text;
            string sexo = SexoRadio.SelectedValue;

            string dataNascInput = DataNascTextBox.Text;
            int dia = Convert.ToInt32(dataNascInput.Substring(0, 2));
            int mes = Convert.ToInt32(dataNascInput.Substring(3, 2));
            int ano = Convert.ToInt32(dataNascInput.Substring(6, 4));
            DateTime dataNasc = new DateTime(ano, mes, dia);

            string cep = CEPTextBox.Text;
            string uf = UFDropDownList.SelectedValue;
            string cidade = CidadeTextBox.Text;
            string bairro = BairroTextBox.Text;
            string logradouro = LogradouroTextBox.Text;
            int numero = 0;
            Int32.TryParse(NumeroTextBox.Text, out numero);

            string complemento = ComplementoTextBox.Text;
            this.lblMensagem.Text = String.Empty;

            Aluno aluno = new Aluno(cpf, rg, nome, email, telefone, celular, cidade, bairro, logradouro, numero, complemento, uf, instituicao, sexo, dataNasc);
            List<Matricula> matriculas = new List<Matricula>();

            List<Turma> listaDeTurmas = Session["ListaDeTurmaDaJornada"] as List<Turma>;

            foreach (ListItem item in cblTurmas.Items)
            {
                if (item.Selected)
                {
                    int idTurmaSelecionada = Convert.ToInt32(item.Value);
                    Turma turma = listaDeTurmas.Find(itemTurma => itemTurma.Id == idTurmaSelecionada);
                    Matricula matricula = new Matricula(turma, aluno, null, false, 0, DateTime.Now);
                    matriculas.Add(matricula);
                }
            }

            try
            {
                //Aluno novoAluno = new Aluno("06118467680", "7318887", "Bruno Inojosa", "brunoinojosa@gmail.com", "33223223", "99889988", "Recife", "Espinheiro", "Rua Teste", 409, "apt 234", "PE", "CIn/UFPE", "masculino", new DateTime(1987,02,20));
                Fachada fachada = Fachada.Instance;
                fachada.InserirAlunoMatriculas(aluno, matriculas);
            }            
            catch (MySqlException ex)
            {
                if (ex.Number == 1042)// Conexao com o banco
                {
                    this.lblMensagem.Text = MensagensPadrao.ERRO_CONEXAO_BD;
                }                          
            }

            #region Limpa todos os campos
            this.NomeTextBox.Text = String.Empty;
            this.RGTextBox.Text = String.Empty;
            this.EmailTextBox.Text = String.Empty;
            this.TelefoneTextBox.Text = String.Empty;
            this.CelularTextBox.Text = String.Empty;
            this.InstituicaoEnsTextBox.Text = String.Empty;
            this.SexoRadio.ClearSelection();
            this.DataNascTextBox.Text = String.Empty;
            this.UFDropDownList.SelectedValue = "vazio";
            this.CidadeTextBox.Text = String.Empty;
            this.BairroTextBox.Text = String.Empty;
            this.LogradouroTextBox.Text = String.Empty;
            this.NumeroTextBox.Text = String.Empty;
            this.ComplementoTextBox.Text = String.Empty;
            this.CPFTextBox.Text = String.Empty;
            this.CEPTextBox.Text = String.Empty;
            this.cblTurmas.ClearSelection();
            #endregion

            Session.Remove("ListaDeTurmaDaJornada");

            Response.Redirect("Matricula_ListarPorCpf.aspx?cpf=" + aluno.Cpf);

        }

        protected void btnPesquisarAluno_Click(object sender, ImageClickEventArgs e)
        {

            try
            {
                //consultar se o aluno já tem cadastro
                //se tiver, carrega os dados dele nos TextBox
                string cpf = this.CPFTextBox.Text;
                cpf = cpf.Replace(".", "");
                cpf = cpf.Replace("-", "");
                Aluno aluno = fachada.ConsultarAlunoPorCpf(cpf);

                if (aluno != null)
                {
                    this.NomeTextBox.Text = aluno.Nome;
                    this.RGTextBox.Text = aluno.Rg;
                    this.EmailTextBox.Text = aluno.Email;
                    this.TelefoneTextBox.Text = aluno.Telefone;
                    this.CelularTextBox.Text = aluno.Celular;
                    this.InstituicaoEnsTextBox.Text = aluno.InstituicaoEnsino;
                    this.SexoRadio.SelectedValue = aluno.Sexo;
                    this.DataNascTextBox.Text = aluno.DataNascimento.ToShortDateString();
                    this.UFDropDownList.SelectedValue = aluno.Uf;
                    this.CidadeTextBox.Text = aluno.Cidade;
                    this.BairroTextBox.Text = aluno.Bairro;
                    this.LogradouroTextBox.Text = aluno.Rua;
                    this.NumeroTextBox.Text = Convert.ToString(aluno.Numero);
                    this.ComplementoTextBox.Text = aluno.Complemento;
                }
            }
            catch (AlunoInexistenteException)
            {
                this.lblMensagem.Text = string.Format("O aluno de CPF {0} ainda não tem cadastro", CPFTextBox.Text);
            }
            catch (MySqlException ex)
            {
                if (ex.Number == 1042)// Conexao com o banco
                {
                    this.lblMensagem.Text = MensagensPadrao.ERRO_CONEXAO_BD;
                }              
            }

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            this.ListarCursos();
        }

    }
}